\chapter{Návrh systému}

Systém bude tvořen dvěma základními prvky, kterými jsou řídící jednotka skleníku a ovládací software, a jedním volitelným, což je webový server sloužící jako spojovací uzel pro vzdálenou správu. Pomocí ovládacího software, se bude nastavovat jak konfigurace jednotky, tak i nastavení samotné receptury pro řízení skleníku. Zároveň bude možné načíst záznamy ze snímačů a zobrazit je na časové přímce. Přenos dat mezi ovládací aplikací a řídící jednotkou bude realizován dvěma způsoby:
\begin{enumerate}
\item pomocí SD karty, která bude sloužit v řídící jednotce jako úložiště dat,
\item nebo vzdáleně pomocí webového serveru a připojení k internetu.
\end{enumerate}


\section{Řídící jednotka}

Řídící jednotka bude postavena na open-source platformě Arduino UNO, především protože je to tak uvedeno v zadání práce, ale také i proto, že se jedná o volně dostupnou platformu určenou pro prototypování a jelikož jde o open-source, je umožněno další upravování a vylepšování všem, kdo o to mají zájem, a zároveň je i cenově dostupná\footnote{V době psaní práce činí pořizovací cena modelu Arduino UNO R3 s procesorem Atmel ATMega328 průměrně okolo 600 Kč.}. Platforma byla původně určena jako jednoduchý nástroj pro studenty, její popularita časem však přerostla a dnes jí využívá mnoho jednotlivců i komunit u nás i ve světě. S tím je spojeno i poměrně velké množství webů a diskuzních fór věnovaných právě Arduinu. 

Programování pro Arduino probíhá v dodávaném prostředí, které je vytvořeno v jazyce Java, a jako jazyk pro mikrokontrolér využívá {\tt C/C++}. Jako kompilátor pak používá volně dostupný nástroj {\tt avr-gcc}.

Jednotka Arduino UNO je z hlavní části tvořena mikrokontrolérem Atmel ATMega328, který pracuje na frekvenci 16MHz, obsahuje 1kB EEPROM paměti, 2kB SRAM operační paměti a 32 kB Flash paměti určené pro uložení programu, z toho 0,5kB zabírá bootloader. Zbytek desky tvoří převodník z USB na RS232 a napájení.
Arduino je také velmi variabilní nástroj díky své modularitě. K desce Arduino lze totiž velmi snadno připojit další rozšiřující moduly, tzv. {\it Shieldy}, pomocí kterých získává nesčetné množství možností využití. Pro tyto shieldy existuje také podpora ve formě knihoven, webových stránek a diskuzních fór.

Součástí zde popisované řídící jednotky musí být modul umožňující práci s SD kartou, ze které se bude nahrávat nastavení jednotky a na kterou budou ukládány záznamy ze snímačů. Dále je požadovaná přítomnost síťového modulu, který umožní uživateli připojení řídící jednotky k internetu, aby bylo možné ji spravovat vzdáleně. Oba tyto moduly jsou součástí {\it Ethernet Shieldu}, který na sobě nese jak kontrolér pro práci s Ethernetem, tak i slot pro vložení microSD karty.

Jednotka by měla poskytovat uživateli informace a možnosti základního ovládání přímo na místě, tedy tam, kde je nainstalována. K tomu dobře poslouží {\it LCD Keypad Shield}, který se skládá z LCD displaye a tlačítek. Display je tvořen šestnácti znaky ve dvou řádcích, každý znak pak obsahuje 35 zobrazovacích bodů v sedmi řádcích po pěti. Tlačítek na tomto shieldu je celkem šest. Čtyři jsou popsána jako směrová ({\tt Left, Right, Up, Down}), jedno jako tlačítko výběru volby ({\tt Select}) a jedno pro znovuspuštění systému ({\tt Reset}). Kromě tlačítka reset jsou všechna připojena přes odporovou kaskádu k jednomu analogovému vstupu Arduina. 

K tomu, aby jednotka mohla získávat data z okolí, je nutné k ní připojit zvolené snímače. V první řadě se nabízí snímač {\it DHT 11}, který v sobě kombinuje snímač okolní teploty a snímač vlhkosti ovzduší. Také přijde vhod snímač půdní vlhkosti, který tvoří půdní sonda, což je pouze tištěný spoj ve tvaru U, a pomocný obvod pro měření průtoku proudu mezi oběma póly půdní sondy. 

Pro ovládání výstupních zařízení, sloužících k zavlažování a ventilaci bude k Arduinu připojen modul sestávající ze dvou relé, přičemž jejich spínací kontakty jsou dimenzovány na 250 voltů střídavého napětí a proud 10 ampér, což by mělo být dostačující pro většinu elektromechanických zařízení použitých ve skleníku. 

Arduino UNO je vybaveno čtrnácti digitálními vstupy-výstupy\footnote{Záleží na tom, jaký mód se pro jednotlivé piny nastaví.} a šesti analogovými vstupy. Z analogových vstupů jsou využity tři, a to pro:
\begin{enumerate}
\item Tlačítka,
\item Snímač teploty a vlhkosti vzduchu DHT 11,
\item Snímač půdní vlhkosti.
\end{enumerate}
Z digitálních pinů jich je využito celkem třináct.
\begin{itemize}
\item {\bf piny 1 a 2} slouží pro ovládání relé na výstupu
\item {\bf piny 3, 5, 6, 7, 8, 9} používá LCD display
\item {\bf piny 4, 10, 11, 12 a 13} jsou použity pro Ethernet Shield, kde jsou piny 11 - 13 společné pro obě zařízení, neboť komunikují po sběrnici {\it SPI}, pin 10 slouží pro řízení síťového modulu a pin 4 pro řízení slotu microSD karty.
\end{itemize}

Volný zůstal pouze pin 0. Jeho možná využití budou popsána v závěru práce. 

\section{Ovládací software}

Aby~bylo řízení skleníku automatické, musí systém pracovat na~základě předem nastavené konfigurace bez~přítomnosti obsluhy. Konfigurace řídící jednotky se bude provádět pomocí aplikace pro PC, která prostřednictvím grafického uživatelského rozhraní poskytne poměrně široké možnosti konfigurování.

Pro tuto aplikaci by bylo vhodné, aby jí bylo možné spustit na většině dostupných operačních systémů, neboť nelze očekávat, že všichni uživatelé budou využívat jeden stejný operační systém. 

Programovacím jazykem pro tvorbu aplikace bude {\tt Java}, je to moderní jazyk a splňuje obě kritéria, díky spouštění na virtuálním stroji je Java multiplatformní jazyk a s využitím knihovny Swing nabízí širokou škálu nástrojů pro tvorbu GUI.

Aplikace musí umožňovat tyto funkce:
\begin{itemize}
\item Založení nového skleníku - vytvoření konfigurančních souborů na SD kartě
\item Editaci nastavení a prohlížení záznamů z SD karty
\item Editaci nastavení a prohlížení záznamů vzdáleně přes internet
\end{itemize}

\section{Webový server}

V případě, že se uživatel rozhodne využívat vzdálenou správu, tedy nastavování řízení a sledování záznamů pomocí internetu, je nutné nějak realizovat komunikaci mezi ovládací aplikací a řídící jednotkou.
